R语言元分析专题:报告与再现性
Chapter 17 报告与再现性
在之前章节中,尽管我们已经介绍了在R中进行元分析时所需要用到的各种技术、方法和策略,然而这些所涉及的统计程序仅占整个元分析家族的一小部分。当我们进行元分析的实际操作过程时,可能还会遇到以下问题:
在这里仅列举了部分你可能遭遇的场景。当你用R进行元分析时,如果能够创建一个可再现的分析的工作流程(reproducible work flow),这显然对你和他人都是有利的。可再现性也是开放科学实践的基石。使你的元分析具有完全的可再现性,让关注你的其他研究者可以完全透明地知道你是如何获得你的元分析的结果的。
RStudio是一个创建可再现工作流程的最佳工具,它能够促进研究者在同一个项目上的合作。在这里我们将介绍两个用于重现、报告和传播你的分析的工具:R Markdown 和 Open Science Framework
- 17.1 R Projects-
在开始正式分析前,先在你RStudio中创建一个R项目是一个好办法。R projects创建了一个与你电脑中特定的文件夹相关联的新环境,这其中包含了你在分析时需要用到的所有的数据与R代码。R project中进行分析意味着你创建的所有对象都暂时保存在你的project中,方便你在下次返回工作时可以直接使用。为了创建一个新的R project,你需要点击RStudio的右上角R Project图标,并在下拉菜单中选择New Project。
然后,你还需要创建一个新目录(New Directory),即你电脑上的一个新文件夹,将它设定为你project的工作目录。
然后,点击“New Project”。
比如,你可以将你的新项目命名为“Meta-Analysis Project”,将项目文件夹保存在 my~Documents/R folder。
当点击“Create Project”后,你就成功创建了自己的R project。在RStudio窗口的右下角Files标签下,你将会看到当前存储在该项目文件夹中的所有数据。通过点击“New Folder”,你也可以在RStudio中直接创建子文件夹,例如一个专门用于存储你的所有data的文件夹。
R project的一大特色是不需要使用绝对路径去引用或导入我们想要调用的文件。我们只需要给指定文件命名,或者,如果需要调用一个子文件,需要给文件名和子文件命名。例如,假定在我们的数据子文件夹中有一个数据集data.xlsx,通过使用readxl 包,我们只需要指定数据文件夹和文件名就能够轻松导入该数据集。
read_excel ("data/data.xlsx")
我们也可以将RStudio右上角的Environment中所列的所有objects保存为一个R Data(.rda)文件,存放至project folder。假定在你Global Environment中有一个dat数据框。我们可以使用下面的代码,将该数据集保存至我们的data folder。
save(dat,file = "data/dat.rda")
之后,我们可以使用下述函数,将该数据集重新加载至我们Global Environment中。
load("data/dat.rda")
- 17.2 R Markdown -
Markdown是一个简单用于文本格式化的标记语言。R Markdown (Xie et al., 2018) 是对Markdown的拓展,它可以轻松地把纯文本、R代码以及R代码的输出整合在一个文档中。这使得R Markdown在报告你的分析结果时是一个非常有帮助的工具。
我们可以使用R Markdown来创建HTML或PDF文件,用于记录分析时所使用的全部代码、基于这些代码所获得的结果以及用于解释每个分析步骤的详细文本。在RStudio中创建R Markdown文件非常便利。只需要点击RStudio窗口左上角一个带有绿色加号的白色图标,然后在下拉菜单中点击“R Markdown”,如下图所示:
在给你的新R Markdown文档命名后,它应该出现在你RStudio的左上角。
该文档中已经包含了一些示例内容,我们可以删除除了前六行之外的内容。
title: "Analysis"
author: "Mathias Harrer"
date: "10/16/2019"
output: html_document
这部分是叫做YAML header的部分(另一种多栏布局的标题Yet Another Multicolumn Layout)。它包括标题、作者、日期和文档的导出格式。在此我将输出格式设定为html_document,意味着该文档完成后将输出一个HTML页面。
R Markdown的结构包括两部分:纯Markdown文本和所谓的R chunks,呈灰底。在这里我将不会详细讲解R Markdown文档中的文本部分格式的优化,并且在Cheat Sheet上(
https://rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf
)上有大量资源可以学习Markdown语法(这大概只需要花费你20分钟左右时间)。
另一方面,关于R code chunks部分,仅仅包含通常你需要在控制台输出的所有R代码。通过点击位于文档右上方的“Insert”图标,你就可以增加自己的新code chunks。
这些chunks中的code的运行方式与常规R code相同,除了其输出结果不会显示在Console或者Plots pane。你只需要点击每个chunk右侧的小绿色三角形,就能运行该chunk。
一旦完成文档,我们可以通过点击上方的‘Knit'’图标将它导出为HTML(或PDF,或MS Word文档)。这将以定义的格式导出一个包含所有的文本、代码和结果的文档。
我们在此仅对R Markdown做了一次非常简短的介绍,其实它有很多的功能需要去探索。你可以访问全面的在线指南(https://bookdown.org/yihui/rmarkdown/),学习更多的关于R Markdown的知识。
- 17.3 OSF-
开放科学框架(Open Science Framework,OSF)是促进研究合作与再现(reproducibility)的一种开源线上平台。OSF实际上是一个线上的资源库,在数据库里,研究者们将他们的代码和分析脚本存放其中,方便和合作者沟通以及使研究过程的所有步骤透明化。
OSF是开放科学运动的先锋,在过去的十年间其势头越来越大。我们鼓励所有的元分析作者通过提供他们所收集的数据以及用以分析数据的代码的开放访问,推进其研究与分析过程对公众的透明化。在OSF默认情况下,你为自己创建的所有存储库都是私人的,你可以自行决定是否公开、何时公开以及公开什么内容。在下文中,我们将为你展现如何在R中设立OSF repository、上传与下载文件以及如何添加合作者。
17.3.1
Access Token
在正式开始使用OSF前,你首先需要在这里https://osf.io/创建一个个人账户。然后你还需要生成一个访问令牌(Access Token),这样就可以在RStudio中直接操作我们的资源库(repository)。可以在https://osf.io/settings/tokens,点击Create token,生成访问令牌。
然后,在Scopes栏下,勾选所有方框并再次点击Create token。此时会出现你的personal access token,将它复制并保存到只有你能找到的地方。
17.3.2
Installing the osfr package
& Authentication
为了能够通过R直接访问OSF,我们需要使用osfr包(Wolen and Hartgerink, 2019)。你可以使用如下代码安装并加载它。
install.packages("remotes")
remotes::install_github("ropensci/osfr")
或
install.packages("osfr")
library(osfr)
或
devtools::install_github('CenterForOpenScience/osfr')
library(osfr)
在使用osfr包的功能前,需要使用access token进行身份认证(authenticate)。这一过程是很有必要的,因为只有我(或者任何有权使用token的人)才能更改my repository中的内容。为了进行身份验证,我们需要使用osf_auth函数,并给它提供我们刚刚收到的access token(下面展示的token是虚构的,并不是我实际使用的access token)。
osf_auth("AtmuMZ3pSuS7tceSMz2NNSAmVDNTzpm2Ud87PcqfHZPtG9U3NLHkRPSt4eE3zRb4")
17.3.3
Setting up the repository
通过使用osfr,我们现在能基于R代码创立一个online repository。假如,我正在进行一项新的元分析项目,我想将个人的data以及R Markdown script上传至OSF repository,我把它命名为“Meta-Analysis Project”。为了能在osf.io(https://osf.io/dashboard)创建一个project,可以使用osf_create_project函数。我需要输入我想创建的repository的名字,并将它保存至名为meta_analysis_project的R object中。
meta_analysis_project <- osf_create_project("Meta-Analysis Project")
通过使用osf_open函数,然后我能够访问刚才新建的repository online。
osf_open(meta_analysis_project)
现在我的repository已经新建成功,我们可以继续对它添加组件(components),就像在电脑中对文件夹操作一样。假如我想创建两个组件,一个是my datasets,另一个是R Markdown cripts。那么需要使用osf_create_component function。
首先我必须为该函数提供R object for my repository(meta_analysis_project),然后为组件设置标题。最后将它们作为objects保存至我的R environment。
scripts <- osf_create_component(meta_analysis_project, title = "Analysis Scripts")
datasets <- osf_create_component(meta_analysis_project, title = "Datasets")
如果现在转到我的repository线上页面,我可以看到两个组件已被添加。
17.3.4
Upload & Download
我们可以使用osf_upload函数,将data上传至OSF repository。该函数需要提供我想要添加文件的component/folder(就是刚才我们保存的R object)以及输入文件的路径。假如我们想上传一个名为“Analysis.rmd” R Markdown script,它当前正保存在我们的R project的子文件夹“scripts”中。我们可以使用下述代码上传。
osf_upload(scripts,"scripts/Analysis.rmd")
我们可以使用osf_ls_files函数,访问该脚本组件的内容,以检查该文档是否已经被成功上传。
在输出结果中我们可以判断是否上传成功。为了下载一个文档,我们可以从osf_ls_files函数的output中选择一行,并将它作为osf_download函数的input,从而将该特定文件下载至我们计算机上的project文件夹。
osf_download(osf_ls_files(scripts)[1,])
17.3.5
Collaboration & Public Access
在我们的OSF repository网页上,可以在“Contributors”栏下添加合作者。
我们也可以在任何时候,通过点击页面右上角的Make Public公开我们的repository。
——END——
翻译:董学开
校对:李润泽、张晴
排版:秦雅慧、 张晴
PPT & 视频:念靖晴 (视频根据小组成员意见需付费观看,见文末; ppt, : https://osf.io/ryvfs/)
往期精选